package com.xpec.c4.service.group.transportlayer;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jgroups.Address;
import org.jgroups.blocks.RequestOptions;

import com.xpec.c4.service.group.ServerGroup;

/**
 * 发送成员信息的任务。
 * 主要是为了延时发送
 * @author lipeilin
 *
 */
public class MemberInfoSender implements Runnable {
	private static final Log log = LogFactory.getLog(MemberInfoSender.class);

	private List<Address> existAddress;

	private GroupMessage message;

	public MemberInfoSender(List<Address> existAddress, GroupMessage message) {
		this.existAddress = existAddress;
		this.message = message;
	}

	@Override
	public void run() {
		if (log.isInfoEnabled()) {
			log.info("MemberInfoSender sent.");
		}
		
		/**
		 * 各 module 加入 jgroup 時會延遲一段時間才廣播，但廣播時送的是延遲之前的資料， 如果
		 * 延遲這段期間 module 資料有變化就不會被廣播出去了。改成在廣播時再取一次最新的資料
		 * 來廣播，避免上述問題。
		 */
		TransportManager manager = ServerGroup.getTransportManager();
		message.setMessageContent(manager.getLocal());
		
		for (Address address : existAddress) {
			ServerGroup.getTransportManager().sendMessage(address, message,
					RequestOptions.ASYNC());
		}
	}

}
